using System;

namespace SharpMud.Net.Telnet.MXP
{
	/// <summary>
	/// This interface provides an abstract understanding as to the
	/// structure and meaning of an MXP Element definition command.
	/// </summary>
	public interface IElementDefinition
	{
		/// <summary>
		/// The name of the element tag being defined.
		/// </summary>
		string					ElementName {get;}
		/// <summary>
		/// The equivication of this element tag, expressed as
		/// MXP-enriched text, with entities evaluated against the
		/// tag instance's attributes, before global entities.
		/// </summary>
		string					Definition	{get;}
		/// <summary>
		/// The attributes (parameters) that are used with this element
		/// </summary>
		IAttributeDefinition[]	Attributes	{get;}
		/// <summary>
		/// Whether or not this element tag is an "open" tag. If not, then it
		/// is a "secure" tag.
		/// </summary>
		bool					Open		{get;}
		/// <summary>
		/// Whehter or not this "definition" is actually a deletion of a previous
		/// definition.
		/// </summary>
		bool					Delete		{get;}
		/// <summary>
		/// Whether or not the element tag this definition represents requires
		/// an ending tag. If 'Empty' is true, then no closing tag is required.
		/// </summary>
		bool					Empty		{get;}

		/// <summary>
		/// Gets the string representation of this element definition
		/// </summary>
		string					ToString();
	}
}
